package dominio.fantasma;

import java.util.List;

import dominio.comun.Posicion;
import dominio.comun.sentidosMovimiento.SentidoMovimiento;
import dominio.fantasma.estados.CadenaEstadosFantasmaFactory;
import dominio.fantasma.estados.EstadoFantasma;
import dominio.fantasma.estrategiasMovimiento.EstrategiaMovimiento;

public class FantasmaFactory implements IFantasmaFactory {

	@Override
	public IFantasma crearFantasmaCazador(String id, EstrategiaMovimiento estrategiaMovimiento, SentidoMovimiento sentidoMovimiento, Posicion posicion) {
		return crearFantasma(id, estrategiaMovimiento, sentidoMovimiento, posicion, 0);
	}

	@Override
	public IFantasma crearFantasmaMuerto(String id, EstrategiaMovimiento estrategiaMovimiento, SentidoMovimiento sentidoMovimiento, Posicion posicion) {
		return crearFantasma(id, estrategiaMovimiento, sentidoMovimiento, posicion, 2);
	}

	@Override
	public IFantasma crearFantasmaPresa(String id, EstrategiaMovimiento estrategiaMovimiento, SentidoMovimiento sentidoMovimiento, Posicion posicion) {
		return crearFantasma(id, estrategiaMovimiento, sentidoMovimiento, posicion, 1);
	}

	private IFantasma crearFantasma(String id, EstrategiaMovimiento estrategiaMovimiento, SentidoMovimiento sentidoMovimiento, Posicion posicion, int index) {
		IFantasma fantasma = new Fantasma(id);
		List<EstadoFantasma> estadosFantasma = new CadenaEstadosFantasmaFactory().crearCadenaEstadosFantasma(fantasma);	
		fantasma.setEstadoFantasma(estadosFantasma.get(index));
		fantasma.setPosicion(posicion);
		fantasma.setSentidoMovimiento(sentidoMovimiento);
		fantasma.setEstrategiaMovimiento(estrategiaMovimiento);
		return fantasma;
	}
	
}
